/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package entities;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;

/**
 *
 * @author damfercer
 */
@Entity
@Table(name = "cliente", catalog = "corporate", schema = "")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Cliente.findAll", query = "SELECT c FROM Cliente c"),
    @NamedQuery(name = "Cliente.findByIdCliente", query = "SELECT c FROM Cliente c WHERE c.idCliente = :idCliente"),
    @NamedQuery(name = "Cliente.findByNombre", query = "SELECT c FROM Cliente c WHERE c.nombre = :nombre"),
    @NamedQuery(name = "Cliente.findByRazonSocial", query = "SELECT c FROM Cliente c WHERE c.razonSocial = :razonSocial"),
    @NamedQuery(name = "Cliente.findByEmail", query = "SELECT c FROM Cliente c WHERE c.email = :email"),
    @NamedQuery(name = "Cliente.findByNif", query = "SELECT c FROM Cliente c WHERE c.nif = :nif"),
    @NamedQuery(name = "Cliente.findByTelefono", query = "SELECT c FROM Cliente c WHERE c.telefono = :telefono"),
    @NamedQuery(name = "Cliente.findByMovil", query = "SELECT c FROM Cliente c WHERE c.movil = :movil"),
    @NamedQuery(name = "Cliente.findByDireccion", query = "SELECT c FROM Cliente c WHERE c.direccion = :direccion"),
    @NamedQuery(name = "Cliente.findByCoordenadaX", query = "SELECT c FROM Cliente c WHERE c.coordenadaX = :coordenadaX"),
    @NamedQuery(name = "Cliente.findByCoordenadaY", query = "SELECT c FROM Cliente c WHERE c.coordenadaY = :coordenadaY"),
    @NamedQuery(name = "Cliente.findByCodigoPostal", query = "SELECT c FROM Cliente c WHERE c.codigoPostal = :codigoPostal"),
    @NamedQuery(name = "Cliente.findByLocalidad", query = "SELECT c FROM Cliente c WHERE c.localidad = :localidad"),
    @NamedQuery(name = "Cliente.findByDireccionFiscal", query = "SELECT c FROM Cliente c WHERE c.direccionFiscal = :direccionFiscal"),
    @NamedQuery(name = "Cliente.findByCodigoPostalFiscal", query = "SELECT c FROM Cliente c WHERE c.codigoPostalFiscal = :codigoPostalFiscal"),
    @NamedQuery(name = "Cliente.findByLocalidadFiscal", query = "SELECT c FROM Cliente c WHERE c.localidadFiscal = :localidadFiscal"),
    @NamedQuery(name = "Cliente.findByDescuento", query = "SELECT c FROM Cliente c WHERE c.descuento = :descuento"),
    @NamedQuery(name = "Cliente.findByMultiplicador", query = "SELECT c FROM Cliente c WHERE c.multiplicador = :multiplicador"),
    @NamedQuery(name = "Cliente.findByWeb", query = "SELECT c FROM Cliente c WHERE c.web = :web"),
    @NamedQuery(name = "Cliente.findByHorario", query = "SELECT c FROM Cliente c WHERE c.horario = :horario"),
    @NamedQuery(name = "Cliente.findByComentarios", query = "SELECT c FROM Cliente c WHERE c.comentarios = :comentarios"),
    @NamedQuery(name = "Cliente.findByFechaAlta", query = "SELECT c FROM Cliente c WHERE c.fechaAlta = :fechaAlta"),
    @NamedQuery(name = "Cliente.findByFechaUltimaModificacion", query = "SELECT c FROM Cliente c WHERE c.fechaUltimaModificacion = :fechaUltimaModificacion"),
    @NamedQuery(name = "Cliente.findByTiendaCreadora", query = "SELECT c FROM Cliente c WHERE c.tiendaCreadora = :tiendaCreadora")})
public class Cliente implements Serializable {
    @Size(max = 15)
    @Column(name = "CODIGO_POSTAL")
    private String codigoPostal;
    @Size(max = 15)
    @Column(name = "CODIGO_POSTAL_FISCAL")
    private String codigoPostalFiscal;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "cliente")
    private List<Ticket> ticketList;
    @OneToMany(mappedBy = "cliente")
    private List<PeticionTraspasoMercancia> peticionTraspasoMercanciaList;
    @OneToMany(mappedBy = "cliente")
    private List<MultiplicadorProductoPedido> multiplicadorProductoPedidoList;
    @Basic(optional = false)
    @NotNull
    @Column(name = "RECARGO")
    private boolean recargo;
    @JoinColumn(name = "TIENDA_CREADORA", referencedColumnName = "ID_TIENDA")
    @ManyToOne
    private Tienda tiendaCreadora;
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "ID_CLIENTE")
    private Integer idCliente;
    @Size(max = 100)
    @Column(name = "NOMBRE")
    private String nombre;
    @Size(max = 100)
    @Column(name = "RAZON_SOCIAL")
    private String razonSocial;
    // @Pattern(regexp="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", message="Invalid email")//if the field contains email address consider using this annotation to enforce field validation
    @Size(max = 60)
    @Column(name = "EMAIL")
    private String email;
    @Size(max = 20)
    @Column(name = "NIF")
    private String nif;
    @Size(max = 15)
    @Column(name = "TELEFONO")
    private String telefono;
    @Size(max = 15)
    @Column(name = "MOVIL")
    private String movil;
    @Size(max = 100)
    @Column(name = "DIRECCION")
    private String direccion;
    // @Max(value=?)  @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation
    @Column(name = "COORDENADA_X")
    private Float coordenadaX;
    @Column(name = "COORDENADA_Y")
    private Float coordenadaY;
    @Size(max = 50)
    @Column(name = "LOCALIDAD")
    private String localidad;
    @Size(max = 100)
    @Column(name = "DIRECCION_FISCAL")
    private String direccionFiscal;
    @Size(max = 100)
    @Column(name = "LOCALIDAD_FISCAL")
    private String localidadFiscal;
    @Column(name = "DESCUENTO")
    private BigDecimal descuento;
    @Column(name = "MULTIPLICADOR")
    private BigDecimal multiplicador;
    @Size(max = 50)
    @Column(name = "WEB")
    private String web;
    @Size(max = 150)
    @Column(name = "HORARIO")
    private String horario;
    @Size(max = 150)
    @Column(name = "COMENTARIOS")
    private String comentarios;
    @Column(name = "FECHA_ALTA")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaAlta;
    @Column(name = "FECHA_ULTIMA_MODIFICACION")
    @Temporal(TemporalType.TIMESTAMP)
    private Date fechaUltimaModificacion;
    @JoinColumn(name = "USUARIO_CREADOR", referencedColumnName = "ID_USUARIO")
    @ManyToOne
    private Usuario usuarioCreador;
    @JoinColumn(name = "TIPO_CLIENTE", referencedColumnName = "ID_TIPO_CLIENTE")
    @ManyToOne
    private TipoCliente tipoCliente;
    @JoinColumn(name = "PAIS_FISCAL", referencedColumnName = "ID_PAIS")
    @ManyToOne
    private Pais paisFiscal;
    @JoinColumn(name = "PROVINCIA_FISCAL", referencedColumnName = "ID_PROVINCIA")
    @ManyToOne
    private Provincia provinciaFiscal;
    @JoinColumn(name = "PAIS", referencedColumnName = "ID_PAIS")
    @ManyToOne
    private Pais pais;
    @JoinColumn(name = "PROVINCIA", referencedColumnName = "ID_PROVINCIA")
    @ManyToOne
    private Provincia provincia;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "cliente")
    private List<Pedido> pedidoList;

    public Cliente() {
    }

    public Cliente(Integer idCliente) {
        this.idCliente = idCliente;
    }

    public Integer getIdCliente() {
        return idCliente;
    }

    public void setIdCliente(Integer idCliente) {
        this.idCliente = idCliente;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public String getRazonSocial() {
        return razonSocial;
    }

    public void setRazonSocial(String razonSocial) {
        this.razonSocial = razonSocial;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getNif() {
        return nif;
    }

    public void setNif(String nif) {
        this.nif = nif;
    }

    public String getTelefono() {
        return telefono;
    }

    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    public String getMovil() {
        return movil;
    }

    public void setMovil(String movil) {
        this.movil = movil;
    }

    public String getDireccion() {
        return direccion;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public Float getCoordenadaX() {
        return coordenadaX;
    }

    public void setCoordenadaX(Float coordenadaX) {
        this.coordenadaX = coordenadaX;
    }

    public Float getCoordenadaY() {
        return coordenadaY;
    }

    public void setCoordenadaY(Float coordenadaY) {
        this.coordenadaY = coordenadaY;
    }

    public String getCodigoPostal() {
        return codigoPostal;
    }

    public void setCodigoPostal(String codigoPostal) {
        this.codigoPostal = codigoPostal;
    }

    public String getLocalidad() {
        return localidad;
    }

    public void setLocalidad(String localidad) {
        this.localidad = localidad;
    }

    public String getDireccionFiscal() {
        return direccionFiscal;
    }

    public void setDireccionFiscal(String direccionFiscal) {
        this.direccionFiscal = direccionFiscal;
    }

    public String getCodigoPostalFiscal() {
        return codigoPostalFiscal;
    }

    public void setCodigoPostalFiscal(String codigoPostalFiscal) {
        this.codigoPostalFiscal = codigoPostalFiscal;
    }

    public String getLocalidadFiscal() {
        return localidadFiscal;
    }

    public void setLocalidadFiscal(String localidadFiscal) {
        this.localidadFiscal = localidadFiscal;
    }

    public BigDecimal getDescuento() {
        return descuento;
    }

    public void setDescuento(BigDecimal descuento) {
        this.descuento = descuento;
    }

    public BigDecimal getMultiplicador() {
        return multiplicador;
    }

    public void setMultiplicador(BigDecimal multiplicador) {
        this.multiplicador = multiplicador;
    }

    public String getWeb() {
        return web;
    }

    public void setWeb(String web) {
        this.web = web;
    }

    public String getHorario() {
        return horario;
    }

    public void setHorario(String horario) {
        this.horario = horario;
    }

    public String getComentarios() {
        return comentarios;
    }

    public void setComentarios(String comentarios) {
        this.comentarios = comentarios;
    }

    public Date getFechaAlta() {
        return fechaAlta;
    }

    public void setFechaAlta(Date fechaAlta) {
        this.fechaAlta = fechaAlta;
    }

    public Date getFechaUltimaModificacion() {
        return fechaUltimaModificacion;
    }

    public void setFechaUltimaModificacion(Date fechaUltimaModificacion) {
        this.fechaUltimaModificacion = fechaUltimaModificacion;
    }

    public Usuario getUsuarioCreador() {
        return usuarioCreador;
    }

    public void setUsuarioCreador(Usuario usuarioCreador) {
        this.usuarioCreador = usuarioCreador;
    }

    public TipoCliente getTipoCliente() {
        return tipoCliente;
    }

    public void setTipoCliente(TipoCliente tipoCliente) {
        this.tipoCliente = tipoCliente;
    }

    public Pais getPaisFiscal() {
        return paisFiscal;
    }

    public void setPaisFiscal(Pais paisFiscal) {
        this.paisFiscal = paisFiscal;
    }

    public Provincia getProvinciaFiscal() {
        return provinciaFiscal;
    }

    public void setProvinciaFiscal(Provincia provinciaFiscal) {
        this.provinciaFiscal = provinciaFiscal;
    }

    public Pais getPais() {
        return pais;
    }

    public void setPais(Pais pais) {
        this.pais = pais;
    }

    public Provincia getProvincia() {
        return provincia;
    }

    public void setProvincia(Provincia provincia) {
        this.provincia = provincia;
    }

    @XmlTransient
    public List<Pedido> getPedidoList() {
        return pedidoList;
    }

    public void setPedidoList(List<Pedido> pedidoList) {
        this.pedidoList = pedidoList;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idCliente != null ? idCliente.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Cliente)) {
            return false;
        }
        Cliente other = (Cliente) object;
        if ((this.idCliente == null && other.idCliente != null) || (this.idCliente != null && !this.idCliente.equals(other.idCliente))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "entities.Cliente[ idCliente=" + idCliente + " ]";
    }

    public Tienda getTiendaCreadora() {
        return tiendaCreadora;
    }

    public void setTiendaCreadora(Tienda tiendaCreadora) {
        this.tiendaCreadora = tiendaCreadora;
    }

    public boolean getRecargo() {
        return recargo;
    }

    public void setRecargo(boolean recargo) {
        this.recargo = recargo;
    }

    @XmlTransient
    public List<MultiplicadorProductoPedido> getMultiplicadorProductoPedidoList() {
        return multiplicadorProductoPedidoList;
    }

    public void setMultiplicadorProductoPedidoList(List<MultiplicadorProductoPedido> multiplicadorProductoPedidoList) {
        this.multiplicadorProductoPedidoList = multiplicadorProductoPedidoList;
    }

    @XmlTransient
    public List<PeticionTraspasoMercancia> getPeticionTraspasoMercanciaList() {
        return peticionTraspasoMercanciaList;
    }

    public void setPeticionTraspasoMercanciaList(List<PeticionTraspasoMercancia> peticionTraspasoMercanciaList) {
        this.peticionTraspasoMercanciaList = peticionTraspasoMercanciaList;
    }

    @XmlTransient
    public List<Ticket> getTicketList() {
        return ticketList;
    }

    public void setTicketList(List<Ticket> ticketList) {
        this.ticketList = ticketList;
    }
}
